开始之前:

1.识别人体姿态输出相关数据

通过以下示例程序,可识别HuskyLens 2视野内的人体姿态,获取姿态相关数据,可以读取的数据有:检测到的人体总数、已学习的姿态总数;靠近HuskyLens 2摄像头画面中心的人体姿态ID号、检测到的第一个姿态的ID号。

示例程序如下。

#  -*- coding: UTF-8 -*-

# MindPlus
# Python
from unihiker import GUI
from pinpong.board import Board
from dfrobot_huskylensv2 import *


u_gui=GUI()
Board().begin()
huskylens = HuskylensV2_I2C()
huskylens.knock()
huskylens.switchAlgorithm(ALGORITHM_POSE_RECOGNITION)
line1=u_gui.draw_text(text="",x=0,y=0,font_size=18, color="#0000FF")
line2=u_gui.draw_text(text="",x=0,y=40,font_size=18, color="#0000FF")
line3=u_gui.draw_text(text="",x=0,y=80,font_size=18, color="#0000FF")
line4=u_gui.draw_text(text="",x=0,y=120,font_size=18, color="#0000FF")
while True:
    huskylens.getResult(ALGORITHM_POSE_RECOGNITION)
    if (huskylens.available(ALGORITHM_POSE_RECOGNITION)):
        line1.config(text=(str("人体总数:") + str((huskylens.getCachedResultNum(ALGORITHM_POSE_RECOGNITION)))))
        line2.config(text=(str("已学习姿态总数:") + str((huskylens.getCachedResultMaxID(ALGORITHM_POSE_RECOGNITION)))))
        line3.config(text=(str("靠中心的人体ID:") + str(huskylens.getCachedCenterResult(ALGORITHM_POSE_RECOGNITION).ID if huskylens.getCachedCenterResult(ALGORITHM_POSE_RECOGNITION) else -1)))
        line4.config(text=(str("第一个人体ID:") + str(huskylens.getCachedResultByIndex(ALGORITHM_POSE_RECOGNITION, 1-1).ID if huskylens.getCachedResultByIndex(ALGORITHM_POSE_RECOGNITION, 1-1) else -1)))

在Mind+中点击运行程序,等待程序上传完成。

进入HuskyLens 2的姿态识别功能。将HuskyLens 2的摄像头对准画面中的人体姿态进行学习,如何学习姿态详细操作请看: 二哈识图 2 姿态识别功能说明。学习完成后,对准该姿态,可在M10屏幕上观察输出结果。

**运行结果:**可输出检测到的人体总数、已学习的姿态总数;可输出指定人体姿态ID号,已学习的人体姿态会按学习顺序分配ID号,未学习的姿态,ID号为0。

Interface Diagram

2.获取画面中指定姿态的相关数据

可以获取指定人体姿态的ID号、名称、五官、人体关节等关键点的数据,详细数据有:人体ID、人体姿态名称、人体中心点的X坐标位置和Y坐标位置、宽度、高度,左右眼耳鼻X/Y坐标,左右两边肩膀、手肘、手腕、臀部、膝盖、脚踝的X/Y坐标。详情请看姿态识别积木说明。

如以下示例程序可以获取靠近摄像头画面中心的人体的鼻子、左边肩膀、手肘、臀部、膝盖、脚踝的X/Y坐标数据,未学习的人体姿态亦可获取。

#  -*- coding: UTF-8 -*-

# MindPlus
# Python
from unihiker import GUI
from pinpong.board import Board
from dfrobot_huskylensv2 import *


u_gui=GUI()
Board().begin()
huskylens = HuskylensV2_I2C()
huskylens.knock()
huskylens.switchAlgorithm(ALGORITHM_POSE_RECOGNITION)
line1=u_gui.draw_text(text="",x=0,y=0,font_size=18, color="#0000FF")
line2=u_gui.draw_text(text="",x=0,y=40,font_size=18, color="#0000FF")
line3=u_gui.draw_text(text="",x=0,y=80,font_size=18, color="#0000FF")
line4=u_gui.draw_text(text="",x=0,y=120,font_size=18, color="#0000FF")
line5=u_gui.draw_text(text="",x=0,y=160,font_size=18, color="#0000FF")
line6=u_gui.draw_text(text="",x=0,y=200,font_size=18, color="#0000FF")
line7=u_gui.draw_text(text="",x=0,y=240,font_size=18, color="#0000FF")
while True:
    huskylens.getResult(ALGORITHM_POSE_RECOGNITION)
    if (huskylens.available(ALGORITHM_POSE_RECOGNITION)):
        line1.config(text=(str("靠近中心的人体ID:") + str(huskylens.getCachedCenterResult(ALGORITHM_POSE_RECOGNITION).ID if huskylens.getCachedCenterResult(ALGORITHM_POSE_RECOGNITION) else -1)))
        line2.config(text=(str("鼻子坐标:") + str((str(huskylens.getCachedCenterResult(ALGORITHM_POSE_RECOGNITION).nose_x if huskylens.getCachedCenterResult(ALGORITHM_POSE_RECOGNITION) else -1) + str((str(",") + str(huskylens.getCachedCenterResult(ALGORITHM_POSE_RECOGNITION).nose_y if huskylens.getCachedCenterResult(ALGORITHM_POSE_RECOGNITION) else -1)))))))
        line3.config(text=(str("左肩坐标:") + str((str(huskylens.getCachedCenterResult(ALGORITHM_POSE_RECOGNITION).lshoulder_x if huskylens.getCachedCenterResult(ALGORITHM_POSE_RECOGNITION) else -1) + str((str(",") + str(huskylens.getCachedCenterResult(ALGORITHM_POSE_RECOGNITION).lshoulder_y if huskylens.getCachedCenterResult(ALGORITHM_POSE_RECOGNITION) else -1)))))))
        line4.config(text=(str("左肘坐标:") + str((str(huskylens.getCachedCenterResult(ALGORITHM_POSE_RECOGNITION).lelbow_x if huskylens.getCachedCenterResult(ALGORITHM_POSE_RECOGNITION) else -1) + str((str(",") + str(huskylens.getCachedCenterResult(ALGORITHM_POSE_RECOGNITION).lelbow_y if huskylens.getCachedCenterResult(ALGORITHM_POSE_RECOGNITION) else -1)))))))
        line5.config(text=(str("左臀坐标:") + str((str(huskylens.getCachedCenterResult(ALGORITHM_POSE_RECOGNITION).lhip_x if huskylens.getCachedCenterResult(ALGORITHM_POSE_RECOGNITION) else -1) + str((str(",") + str(huskylens.getCachedCenterResult(ALGORITHM_POSE_RECOGNITION).lhip_y if huskylens.getCachedCenterResult(ALGORITHM_POSE_RECOGNITION) else -1)))))))
        line6.config(text=(str("左膝坐标:") + str((str(huskylens.getCachedCenterResult(ALGORITHM_POSE_RECOGNITION).lknee_x if huskylens.getCachedCenterResult(ALGORITHM_POSE_RECOGNITION) else -1) + str((str(",") + str(huskylens.getCachedCenterResult(ALGORITHM_POSE_RECOGNITION).lknee_y if huskylens.getCachedCenterResult(ALGORITHM_POSE_RECOGNITION) else -1)))))))
        line7.config(text=(str("左踝坐标:") + str((str(huskylens.getCachedCenterResult(ALGORITHM_POSE_RECOGNITION).lankle_x if huskylens.getCachedCenterResult(ALGORITHM_POSE_RECOGNITION) else -1) + str((str(",") + str(huskylens.getCachedCenterResult(ALGORITHM_POSE_RECOGNITION).lankle_y if huskylens.getCachedCenterResult(ALGORITHM_POSE_RECOGNITION) else -1)))))))

**运行结果:**如下图,运行程序,K10屏幕上显示人体ID号及该人体的鼻子、部分人体关键点的坐标数据。由于该人体姿态未学习,因此人体ID为0。

Interface Diagram

除以上数据,还可以获取更多人体姿态数据。例如,判断某指定ID的姿态是否在画面中、指定姿态的名称、可获取画面中相同姿态的数量,当画面中出现多个相同姿态时,可指定获取其中某个姿态的相关参数,包括名称、X/Y坐标、宽度、高度及人体关键点坐标数据。

示例程序如下:

#  -*- coding: UTF-8 -*-

# MindPlus
# Python
from unihiker import GUI
from pinpong.board import Board
from dfrobot_huskylensv2 import *


u_gui=GUI()
Board().begin()
huskylens = HuskylensV2_I2C()
huskylens.knock()
huskylens.switchAlgorithm(ALGORITHM_POSE_RECOGNITION)
line1=u_gui.draw_text(text="",x=0,y=0,font_size=18, color="#0000FF")
line2=u_gui.draw_text(text="",x=0,y=40,font_size=18, color="#0000FF")
line3=u_gui.draw_text(text="",x=0,y=80,font_size=18, color="#0000FF")
line4=u_gui.draw_text(text="",x=0,y=120,font_size=18, color="#0000FF")
while True:
    huskylens.getResult(ALGORITHM_POSE_RECOGNITION)
    if (huskylens.available(ALGORITHM_POSE_RECOGNITION)):
        line1.config(text=(str("ID1姿态总数:") + str((huskylens.getCachedResultNumByID(ALGORITHM_POSE_RECOGNITION, 1)))))
        line2.config(text=(str("ID1姿态名称:") + str(huskylens.getCachedResultByID(ALGORITHM_POSE_RECOGNITION, 1).name if huskylens.getCachedResultByID(ALGORITHM_POSE_RECOGNITION, 1) else -1)))
        line3.config(text="第一个ID1姿态")
        line4.config(text=(str("的坐标:") + str((str(huskylens.getCachedIndexResultByID(ALGORITHM_POSE_RECOGNITION, 1, 1-1).xCenter if huskylens.getCachedIndexResultByID(ALGORITHM_POSE_RECOGNITION, 1, 1-1) else -1) + str((str(",") + str(huskylens.getCachedIndexResultByID(ALGORITHM_POSE_RECOGNITION, 1, 1-1).yCenter if huskylens.getCachedIndexResultByID(ALGORITHM_POSE_RECOGNITION, 1, 1-1) else -1)))))))

**运行结果:**如图所示,可获取到画面中ID1姿态数量、名称,以及检测到的第一个ID1姿态的坐标位置。

Interface Diagram